package com.diandian.backend.store.controller;

import com.diandian.backend.store.param.*;
import com.diandian.backend.store.service.ElemeRetailStoreService;
import com.diandian.base.boot.starter.response.BaseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * [门店]饿了么零售门店API
 * 说明：
 *      belong + orgId + orgCode 共同定位一个租户
 *      一个租户下，门店编码唯一
 *
 * @author zyz diandian@qq.com
 * @since 1.0.0 2025-08-25
 */
@RestController
@RequestMapping("/eleme/retail/store")
public class ElemeRetailStoreController {

    @Autowired
    private ElemeRetailStoreService elemeRetailStoreService;

    /**
     * 分页查询某个节点下的门店列表
     * 必须参数：belong、nodeCodeEql、pageNum,pageSize
     * 可选参数：orgId、orgCode
     *
    */
    @PostMapping("/page")
    public BaseResult page(@RequestBody ElemeRetailStorePageParam param) {
        param.check();
        return new BaseResult(0, "success", elemeRetailStoreService.storePage(param.toDTO()));
    }

    /**
     * 根据门店编码查询门店信息
     * 必须参数：belong、id和code二选一
     * 可选参数：orgId、orgCode
     */
    @PostMapping("/detail")
    public BaseResult getDetail(@RequestBody ElemeRetailStoreDetailParam param) {
        return new BaseResult(0, "success", elemeRetailStoreService.getStoreDetail(param.toDTO()));
    }

    /**
     * 新增门店（新建在某个节点下）
     * 说明：同belong下不能有相同编码的门店
     */
    @PostMapping("/add")
    public BaseResult addStore(@RequestBody ElemeRetailStoreAddParam param) {
        param.check();
        elemeRetailStoreService.addStore(param.toDTO());
        return new BaseResult(0, "success", null);
    }

    /**
     * 删除门店（门店API）
     * 说明：
     * （1）逻辑删除，已被引用的门店不能删除
     * （2）删除门店信息、删除门店节点的关联关系
     */
    @PostMapping("/remove")
    public BaseResult removeStore(@RequestBody ElemeRetailStoreRemoveParam param) {
        param.check();
        elemeRetailStoreService.removeStore(param.toDTO());
        return new BaseResult(0, "success", null);
    }

    /**
     * 删除门店（门店API）
     * 说明：
     * （1）逻辑删除，已被引用的门店不能删除
     * （2）删除门店信息、删除门店节点的关联关系
     */
    @PostMapping("/removeById")
    public BaseResult removeById(@RequestBody ElemeRetailStoreRemoveByIdParam param) {
        param.check();
        elemeRetailStoreService.removeById(param.getId(), param.getBelong());
        return new BaseResult(0, "success", null);
    }

    /**
     * 编辑门店基本信息：根据归属标识 和 线上门店编码修改
     * 说明：门店编码不可修改
     */
    @PostMapping("/edit/basic")
    public BaseResult updateStoreBasicInfo(@RequestBody ElemeRetailStoreBasicUpdateParam param) {
        elemeRetailStoreService.updateStoreBasicInfo(param.toDTO());
        return new BaseResult(0, "success", null);
    }

    /**
     * 编辑门店归属节点
     * 说明：同belong下不能有相同编码的门店
     */
    @PostMapping("/edit/node")
    public BaseResult updateStoreNodeInfo(@RequestBody ElemeRetailStoreNodeUpdateParam param) {
        param.check();
        elemeRetailStoreService.updateStoreNodeInfo(param.toDTO());
        return new BaseResult(0, "success", null);
    }
}